package Modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;

import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.OneToMany;
import javax.persistence.Persistence;
import javax.persistence.Query;

@Entity
public class PreguntaCerrada extends Pregunta implements Serializable {

    private boolean otro;
    @OneToMany(cascade = CascadeType.ALL)
    private List<Respuesta> respuestas;

    public PreguntaCerrada(List<Respuesta> respuestas) {

        this.respuestas = respuestas;
    }

    public PreguntaCerrada(String pregunta, String tipo, boolean o) {
        super(pregunta, tipo);
        respuestas = new ArrayList<Respuesta>();
        this.otro = o;
    }

    public PreguntaCerrada() {
        respuestas = new ArrayList<Respuesta>();
    }

    public boolean isOtro() {
        return otro;
    }

    public void setOtro(boolean otro) {
        this.otro = otro;
    }

    public List<Respuesta> getRespuestas() {
        return respuestas;
    }

    public void setRespuestas(List<Respuesta> respuestas) {
        this.respuestas = respuestas;
    }

    public Long agregarP(String pre, String tipo, boolean ot) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        PreguntaCerrada pc = new PreguntaCerrada(pre, tipo, ot);
        em.getTransaction().begin();
        em.persist(pc);
        em.getTransaction().commit();
        Query q = em.createQuery("select Max(c.id) from Pregunta c");
        return (Long) q.getSingleResult();
    }

    public void addR(Respuesta r) {
        this.respuestas.add(r);
    }

    public void asignarR(Long id, Respuesta r) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        PreguntaCerrada p = em.find(PreguntaCerrada.class, id);
        p.addR(r);
        em.getTransaction().begin();
        em.persist(p);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }
    /*public PreguntaCerrada buscar(Long id) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
    EntityManager em = emf.createEntityManager();
    PreguntaCerrada p = em.find(PreguntaCerrada.class, id);
    em.close();
    emf.close();
    return p;
    }*/

    public void actualizar(String pre, Long id, boolean ot) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        PreguntaCerrada p = em.find(PreguntaCerrada.class, id);
        em.getTransaction().begin();
        p.setPregunta(pre);
        p.setOtro(ot);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }


    public void borrarRespuestas(Long id){
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        PreguntaCerrada p = em.find(PreguntaCerrada.class, id);
        em.getTransaction().begin();
        List l=p.getRespuestas();
        Iterator i=l.iterator();
        while(i.hasNext()){
        Respuesta r=(Respuesta)i.next();
        Respuesta re=em.find(Respuesta.class, r.getId());
        em.remove(re);
        }
        p.getRespuestas().clear();
        em.persist(p);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    void addI(Indicador i) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
